package Classes;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

public class TestaOpnioes {

        Opniao exemplo1, exemplo2, exemplo3, exemplo4,exemplo5,exemplo6;
        Estabelecimento restaurante1,restaurante2,restaurante3,restaurante4,restaurante5;
        
        @Before
        public void criaOpnioes() throws Exception {
        	restaurante1 = new Estabelecimento("Bar do George", "Av.beberibe","a la carte");
        	restaurante2 = new Estabelecimento("Caldinho sem nome", "Rua Princesa","Petisco");
        	restaurante3 = new Estabelecimento("Bargaco", "Av.Boa Viagem","a la carte");
                
            exemplo1 = new Opniao(restaurante1 , 0, "Nao conheco");
            exemplo2 = new Opniao(restaurante2, -3, "Acho bastante ruim");
            exemplo3 = new Opniao(restaurante3, 5, "Incrivel, sensacional, impressionante");
        }
        
        @Test
        public void testaGetComentario(){
                Assert.assertEquals("Nao conheco", exemplo1.getComentario());
                Assert.assertEquals("Acho bastante ruim", exemplo2.getComentario());
                Assert.assertEquals("Incrivel, sensacional, impressionante", exemplo3.getComentario());
        }
        
        @Test
        public void testaSetComentario(){
                Assert.assertEquals("Nao conheco", exemplo1.getComentario());
                exemplo1.setComentario("bonzinho");
                Assert.assertEquals("bonzinho", exemplo1.getComentario());

                Assert.assertEquals("Acho bastante ruim", exemplo2.getComentario());
                exemplo2.setComentario("Bastante bom");
                Assert.assertEquals("Bastante bom", exemplo2.getComentario());

                Assert.assertEquals("Incrivel, sensacional, impressionante", exemplo3.getComentario());
                exemplo3.setComentario("Muito bom");
                Assert.assertEquals("Muito bom", exemplo3.getComentario());

        }
        
        @Test
        public void testaGetEstabelecimento() throws Exception{
                restaurante1 = new Estabelecimento("Bar do George", "Av.beberibe","a la carte");
                restaurante2 = new Estabelecimento("Caldinho sem nome", "Rua Princesa","Petisco");
                restaurante3 = new Estabelecimento("Bargaco", "Av.Boa Viagem","a la carte");
                
                Assert.assertEquals(restaurante1, exemplo1.getEstabelecimento());
                Assert.assertEquals(restaurante2, exemplo2.getEstabelecimento());
                Assert.assertEquals(restaurante3, exemplo3.getEstabelecimento());
        }
        
        @Test
        public void testaGetNomeRestaurante(){            
            Assert.assertEquals("Bar do George", exemplo1.getNomeEstabelecimento());
            Assert.assertEquals("Caldinho sem nome", exemplo2.getNomeEstabelecimento());
            Assert.assertEquals("Bargaco", exemplo3.getNomeEstabelecimento());
        }
        
        @Test
        public void testaSetNota(){
                Assert.assertEquals(0, exemplo1.getNota());
                exemplo1.setNota(3);
                Assert.assertEquals(3, exemplo1.getNota());

                
                Assert.assertEquals(-3, exemplo2.getNota());
                exemplo2.setNota(0);
                Assert.assertEquals(0, exemplo2.getNota());

                Assert.assertEquals(5, exemplo3.getNota());
                exemplo3.setNota(-1);
                Assert.assertEquals(-1, exemplo3.getNota());

        }
        
        @Test
        public void testaGetNota(){
                Assert.assertEquals(0, exemplo1.getNota());
                Assert.assertEquals(-3, exemplo2.getNota());
                Assert.assertEquals(5, exemplo3.getNota());
        }
        
        @Test
        public void testaConstrutor(){
                
                //Testando nome do restaurante
                try{
                        exemplo4 = new Opniao(null, 0, "Nao conheco");
                        Assert.fail("Era esperado um tratamento de erro para parametro invalido");
                }catch (Exception e) {
                        Assert.assertEquals("Erro de tratamento da excessao desejada", "Parametro: estabelecimento nao eh instancia!", e.getMessage());
                }

        
                //Testando nota
                try{
                        exemplo5 = new Opniao(restaurante4, -6, "Nao conheco");
                        Assert.fail("Era esperado um tratamento de erro para parametro invalido");
                }catch (Exception e) {
                        Assert.assertEquals("Erro de tratamento da excessao desejada", "Nota fora dos parametros!", e.getMessage());
                }
                try{
                        exemplo5 = new Opniao(restaurante4, 6, "Muito bom");
                        Assert.fail("Era esperado um tratamento de erro para parametro invalido");
                }catch (Exception e) {
                        Assert.assertEquals("Erro de tratamento da excessao desejada", "Nota fora dos parametros!", e.getMessage());
                }

                
                //Testando comentario
                try{
                        exemplo6 = new Opniao(restaurante4, 3, "");
                        Assert.fail("Era esperado um tratamento de erro para parametro invalido");
                }catch (Exception e) {
                        Assert.assertEquals("Erro de tratamento da excessao desejada", "Comentario vazio ou nulo!", e.getMessage());
                }
                try{
                        exemplo6 = new Opniao(restaurante4, 3, "     ");
                        Assert.fail("Era esperado um tratamento de erro para parametro invalido");
                }catch (Exception e) {
                        Assert.assertEquals("Erro de tratamento da excessao desejada", "Comentario vazio ou nulo!", e.getMessage());
                }

        }
        
        
}